package com.xya.algorithm.insertion;

import java.util.Arrays;

/**
 * ******************************************************************************************************
 * 中文名称  *     英文名称    *  平均时间复杂度  *  最坏时间复杂度  *  最好时间复杂度  *  空间复杂度  *  稳定性  *
 * ******************************************************************************************************
 * 插入排序  *    Insertion   *      n^2       *       n^2      *      n         *      1      *    稳   *
 * ******************************************************************************************************
 */
public class Insertion {

    public static void sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j - 1])
                    swap(arr, j, j - 1);
            }
        }
    }

    public static void sort2(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            //记录当前要移动的元素的值
            int temp = arr[i];

            for (int j = i; j > 0; j--) {
                //如果当前要移动的元素值比前一个小，则将前一个数往后移
                if (temp < arr[j - 1]) {
                    arr[j] = arr[j - 1];
                    if (j - 1 == 0) {
                        arr[j - 1] = temp;
                    } else {

                        System.out.println("in else");
                    }
                }

            }
        }
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{5, 2, 1, 4, 3, 6};
        // {2, 5, 1, 4, 3, 6}
        // {1, 2, 5, 4, 3, 6}
        // {1, 2, 4, 5, 3, 6}
        // {1, 2, 3, 4, 5, 6}

        Insertion.sort2(arr);

        System.out.println(Arrays.toString(arr));
    }
}
